package model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import persistence.FacturaMapper;

public class Factura {
	private long facturaId;
	private float monto;
	private Date fecha;
	
	private List<FacturaDetalle> detalles;
	
	public Factura(int facturaId, float monto, Date fecha) {
		this.facturaId = facturaId;
		this.monto = monto;
		this.fecha = fecha;
	}
	
	public Factura(Map<Producto, Integer> productos) {
		detalles = new ArrayList<FacturaDetalle>();
		agregarProductos(productos);
	}
	
	public boolean guardar() {
		return FacturaMapper.getInstance().insertar(this);
	}

	private void agregarProductos(Map<Producto, Integer> productos) {
		monto = 0;
		for(Map.Entry<Producto, Integer> entry: productos.entrySet()) {
			Producto producto = entry.getKey();
			int cantidad = entry.getValue();
			detalles.add(new FacturaDetalle(producto, cantidad, producto.obtenerPrecio()));
			monto += producto.obtenerPrecio() * cantidad;
		}
	}

	public void agregarProducto(Producto producto, int cantidad ) {
		FacturaDetalle detalle = new FacturaDetalle(producto, cantidad, producto.obtenerPrecio());
		detalles.add(detalle);
		monto += producto.obtenerPrecio() * cantidad;
	}
	
	public void removerProducto(Producto producto) {
		for(FacturaDetalle detalle: detalles) {
			if(producto.getCodigo() == detalle.getProductoCodigo())
				detalles.remove(detalle);
				monto -= detalle.getPrecioUnitario() * detalle.getCantidad();
		}
	}
	
	public List<FacturaDetalle> getDetalles() {
		return detalles;
	}
	
	public void setDetalles(List<FacturaDetalle> detalles) {
		this.detalles = detalles;
	}

	public long getFacturaId() {
		return facturaId;
	}

	public float getMonto() {
		return monto;
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFacturaId(long facturaId) {
		this.facturaId = facturaId;
	}

}
